From: Florian Müllner Date: Thu, 5 Mar 2020 17:46:18 +0000 (+0100) Subject: extensionPrefs: Hook up kill switch to D-Bus property X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~751^2^2~116 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=5c031200ce83034bb6060c4b5f6b5286e1df53e8;p=gnome-shell.git extensionPrefs: Hook up kill switch to D-Bus property Now that the org.gnome.Shell.Extensions interface exposes the disable-user-extensions setting on D-Bus, we can use that instead of the shell's GSettings. In a future where we distribute the app separately as flatpak, this will require one less hole in the sandbox. https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1081 --- diff --git a/js/extensionPrefs/data/ui/extensions-window.ui b/js/extensionPrefs/data/ui/extensions-window.ui index c88375b1b..619582355 100644 --- a/js/extensionPrefs/data/ui/extensions-window.ui +++ b/js/extensionPrefs/data/ui/extensions-window.ui @@ -90,8 +90,9 @@ - + True + win.user-extensions-enabled end diff --git a/js/extensionPrefs/js/main.js b/js/extensionPrefs/js/main.js index e4e2328c6..aa325ea92 100644 --- a/js/extensionPrefs/js/main.js +++ b/js/extensionPrefs/js/main.js @@ -36,6 +36,11 @@ function stripPrefix(string, prefix) { return string; } +function toggleState(action) { + let state = action.get_state(); + action.change_state(new GLib.Variant('b', !state.get_boolean())); +} + var Application = GObject.registerClass( class Application extends Gtk.Application { _init() { @@ -94,7 +99,6 @@ var ExtensionsWindow = GObject.registerClass({ InternalChildren: [ 'userList', 'systemList', - 'killSwitch', 'mainBox', 'mainStack', 'scrolledWindow', @@ -121,10 +125,15 @@ var ExtensionsWindow = GObject.registerClass({ action.connect('activate', this._logout.bind(this)); this.add_action(action); - this._settings = new Gio.Settings({ schema_id: 'org.gnome.shell' }); - this._settings.bind('disable-user-extensions', - this._killSwitch, 'active', - Gio.SettingsBindFlags.DEFAULT | Gio.SettingsBindFlags.INVERT_BOOLEAN); + action = new Gio.SimpleAction({ + name: 'user-extensions-enabled', + state: new GLib.Variant('b', false), + }); + action.connect('activate', toggleState); + action.connect('change-state', (a, state) => { + this._shellProxy.UserExtensionsEnabled = state.get_boolean(); + }); + this.add_action(action); this._userList.set_sort_func(this._sortList.bind(this)); this._userList.set_header_func(this._updateHeader.bind(this)); @@ -135,6 +144,10 @@ var ExtensionsWindow = GObject.registerClass({ this._shellProxy.connectSignal('ExtensionStateChanged', this._onExtensionStateChanged.bind(this)); + this._shellProxy.connect('g-properties-changed', + this._onUserExtensionsEnabledChanged.bind(this)); + this._onUserExtensionsEnabledChanged(); + this._scanExtensions(); } @@ -388,6 +401,12 @@ var ExtensionsWindow = GObject.registerClass({ ].find(c => c.uuid === uuid); } + _onUserExtensionsEnabledChanged() { + let action = this.lookup_action('user-extensions-enabled'); + action.set_state( + new GLib.Variant('b', this._shellProxy.UserExtensionsEnabled)); + } + _onExtensionStateChanged(proxy, senderName, [uuid, newState]) { let extension = ExtensionUtils.deserializeExtension(newState); let row = this._findExtensionRow(uuid); @@ -632,10 +651,7 @@ var ExtensionRow = GObject.registerClass({ name: 'enabled', state: new GLib.Variant('b', false), }); - action.connect('activate', () => { - let state = action.get_state(); - action.change_state(new GLib.Variant('b', !state.get_boolean())); - }); + action.connect('activate', toggleState); action.connect('change-state', (a, state) => { if (state.get_boolean()) this._app.shellProxy.EnableExtensionRemote(this.uuid);